<?php
/**
 * ErrorHook
 * 
 * @author Alexey Strelnikoff <zog@zoggi.net>
 */

namespace Zoggi\ErrorHook;

/**
 * Нотификатор для записи ошибок в файл.
 */
class LogNotifier extends AbstractNotifier {

	/**
	 * Имя лог-файла
	 * @var string
	 */
	private $filename;

	/**
	 * Максимальный размер в байтах
	 * @var int
	 */
	private $filesize;

	/**
	 * Возвращет нотификатор для записи ошибок в лог-файл
	 * 
	 * @param int $level Уровень ошибок, которые нужно логировать
	 * @param string $filename Имя файла, в который записывать ошибки
	 * @param int $filesize Максимальный размер файла в мегабайтах
	 */
	public function __construct( $level, $filename, $filesize ) {
		$this->level = $level;
		$this->filename = $filename;
		$this->filesize = $filesize * 1024 * 1024;
	}

	public function notifyOne( ErrorUnit $error ) {

		if ( $error->checkLevel($this->level) ) {
			$message = '----- ' . strftime("%d.%m.%Y %H:%M:%S") . "-----\n"
				. $error . "\n";
			if ( !file_exists($this->filename) || filesize($this->filename) > $this->filesize ) {
				$mode = 'w';
			} else {
				$mode = 'a';
			}
			$f = fopen($this->filename, $mode);
			fwrite($f, $message);
			fclose($f);
		}
	}

	public function notifyAll( array $errors ) {
		return true;
	}

}